package com.example.springboot_h2_jpa.repository;

import com.example.springboot_h2_jpa.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    
    // 方法命名约定查询 - 根据用户名查找
    Optional<User> findByUsername(String username);
    
    // 方法命名约定查询 - 根据邮箱查找
    Optional<User> findByEmail(String email);
    
    // 方法命名约定查询 - 查找年龄大于指定值的用户
    List<User> findByAgeGreaterThan(Integer age);
    
    // 方法命名约定查询 - 查找年龄在指定范围内的用户
    List<User> findByAgeBetween(Integer minAge, Integer maxAge);
    
    // 自定义JPQL查询 - 根据邮箱域名查找用户
    @Query("SELECT u FROM User u WHERE u.email LIKE %:domain")
    List<User> findByEmailDomain(@Param("domain") String domain);
    
    // 自定义JPQL查询 - 统计年龄大于指定值的用户数量
    @Query("SELECT COUNT(u) FROM User u WHERE u.age > :age")
    Long countUsersOlderThan(@Param("age") Integer age);
}